

import qs from 'qs'  


// 模拟封装 axios 函数
// 基于Promise  

let pro = new Promise((resolve, reject) => {
    if(Math.random() > 0.5) {
        resolve('今天不上晚自习。。。。')
    }else{
        reject('今天上到10点哦... ')
    }
})

pro.then(res=>{
    console.log(res)
}).catch(err=>{
    console.log(err)
})

export const Ajax = {
    get(url,options={}){
        return  new Promise((resolve,reject)=>{

            function handlerCallBack(){
                // 0 请求未初始化
                // 1 请求已经建立  但是没有发送
                // 2 请求已经发送  正在处理
                // 3 请求已经处理  准备响应
                // 4 请求已经完成  数据全部响应 

                if(this.readyState!=4){
                    return ;
                }
                if(this.status==200){
                    resolve({
                        data:JSON.parse(this.responseText)
                    })
                }else{
                    reject(this.statusText)
                }
            }

            let params = options.params ? options.params : ''
            let headers = options.headers ? options.headers: null;
            if(params){
                params = qs.stringify(params)
            }
            url = params ? url +"?"+ params : url;
            // ajax 请求数据的步骤
            let xhr = new XMLHttpRequest()
            xhr.open("GET",url,true)  
            if(headers){
                for(var key in headers){
                    xhr.setRequestHeader(key,headers[key])
                }
            }
            xhr.send()
            xhr.onreadystatechange = handlerCallBack
        })
    },
    post(url,body,options){ 
        return  new Promise((resolve,reject)=>{

            function handlerCallBack(){

                if(this.readyState!=4){
                    return ;
                }
                if(this.status==200){
                    resolve({
                        data:JSON.parse(this.responseText)
                    })
                }else{
                    reject(this.statusText)
                }
            }

            let params = options.params ? options.params : ''
            let headers = options.headers ? options.headers: null;
            if(params){
                params = qs.stringify(params)
            }
            url = params ? url +"?"+ params : url;
            // ajax 请求数据的步骤
            let xhr = new XMLHttpRequest()
            xhr.open("POST",url,true)  
            if(headers){
                for(var key in headers){
                    xhr.setRequestHeader(key,headers[key])
                }
            }

            // axios 自动识别数据类型 然后 设置不同的 content-type 
            // 上传文件 mulity-party
            xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')
            xhr.send(qs.stringify(body))
            xhr.onreadystatechange = handlerCallBack
        })
    }
}